package com.health.content.service.impl;

import java.util.List;
import com.health.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.health.content.mapper.ContentCategoryMapper;
import com.health.content.domain.ContentCategory;
import com.health.content.service.IContentCategoryService;

/**
 * 栏目管理Service业务层处理
 * 
 * @author moxxie
 * @date 2025-10-27
 */
@Service
public class ContentCategoryServiceImpl implements IContentCategoryService 
{
    @Autowired
    private ContentCategoryMapper contentCategoryMapper;

    /**
     * 查询栏目管理
     * 
     * @param categoryId 栏目管理主键
     * @return 栏目管理
     */
    @Override
    public ContentCategory selectContentCategoryByCategoryId(Long categoryId)
    {
        return contentCategoryMapper.selectContentCategoryByCategoryId(categoryId);
    }

    /**
     * 查询栏目管理列表
     * 
     * @param contentCategory 栏目管理
     * @return 栏目管理
     */
    @Override
    public List<ContentCategory> selectContentCategoryList(ContentCategory contentCategory)
    {
        return contentCategoryMapper.selectContentCategoryList(contentCategory);
    }

    /**
     * 新增栏目管理
     * 
     * @param contentCategory 栏目管理
     * @return 结果
     */
    @Override
    public int insertContentCategory(ContentCategory contentCategory)
    {
        contentCategory.setCreateTime(DateUtils.getNowDate());
        // 设置level
        if (contentCategory.getParentId() == 0) {
            contentCategory.setLevel(1L);
        } else {
            Long parentLevel = contentCategoryMapper.getParentLevel(contentCategory.getParentId());
            contentCategory.setLevel(parentLevel + 1);
        }

        return contentCategoryMapper.insertContentCategory(contentCategory);
    }

    /**
     * 修改栏目管理
     * 
     * @param contentCategory 栏目管理
     * @return 结果
     */
    @Override
    public int updateContentCategory(ContentCategory contentCategory)
    {
        contentCategory.setUpdateTime(DateUtils.getNowDate());
        return contentCategoryMapper.updateContentCategory(contentCategory);
    }

    /**
     * 批量删除栏目管理
     * 
     * @param categoryIds 需要删除的栏目管理主键
     * @return 结果
     */
    @Override
    public int deleteContentCategoryByCategoryIds(Long[] categoryIds)
    {
        return contentCategoryMapper.deleteContentCategoryByCategoryIds(categoryIds);
    }

    /**
     * 删除栏目管理信息
     * 
     * @param categoryId 栏目管理主键
     * @return 结果
     */
//    @Override
//    public int deleteContentCategoryByCategoryId(Long categoryId)
//    {
//        return contentCategoryMapper.deleteContentCategoryByCategoryId(categoryId);
//    }

    @Override
    public int deleteContentCategoryByCategoryId(Long categoryId)
    {
        // 递归删除所有子栏目
        deleteChildrenCategories(categoryId);
        return contentCategoryMapper.deleteContentCategoryByCategoryId(categoryId);
    }

    /**
     * 递归删除子栏目
     */
    private void deleteChildrenCategories(Long parentId) {
        // 查询所有子栏目
        ContentCategory query = new ContentCategory();
        query.setParentId(parentId);
        List<ContentCategory> children = contentCategoryMapper.selectContentCategoryList(query);

        // 递归删除每个子栏目的子栏目
        for (ContentCategory child : children) {
            deleteChildrenCategories(child.getCategoryId());
            contentCategoryMapper.deleteContentCategoryByCategoryId(child.getCategoryId());
        }
    }

    /**
     * 更新栏目状态
     */
    @Override
    public int updateContentCategoryStatus(Long categoryId, String status, Boolean recursive) {
        int result = 0;

        // 更新当前栏目状态
        ContentCategory current = new ContentCategory();
        current.setCategoryId(categoryId);
        current.setStatus(status);
        current.setUpdateTime(DateUtils.getNowDate());
        result += contentCategoryMapper.updateContentCategory(current);

        // 如果需要递归更新子栏目状态
        if (recursive) {
            updateChildrenStatus(categoryId, status);
        }

        // 如果是启用状态，并且需要递归启用父栏目（这个参数在启用时通常为true）
        if (recursive && "0".equals(status)) {
            recursiveUpdateParentStatusToNormal(categoryId);
        }

        return result;
    }

    /**
     * 递归更新子栏目状态
     */
    private void updateChildrenStatus(Long parentId, String status) {
        // 查询所有子栏目
        ContentCategory query = new ContentCategory();
        query.setParentId(parentId);
        List<ContentCategory> children = contentCategoryMapper.selectContentCategoryList(query);

        // 更新每个子栏目的状态
        for (ContentCategory child : children) {
            ContentCategory updateChild = new ContentCategory();
            updateChild.setCategoryId(child.getCategoryId());
            updateChild.setStatus(status);
            updateChild.setUpdateTime(DateUtils.getNowDate());
            contentCategoryMapper.updateContentCategory(updateChild);

            // 递归更新孙子栏目
            updateChildrenStatus(child.getCategoryId(), status);
        }
    }


    /**
     * 递归更新父栏目状态为正常
     */
    @Override
    public int recursiveUpdateParentStatusToNormal(Long categoryId) {
        int result = 0;
        ContentCategory current = contentCategoryMapper.selectContentCategoryByCategoryId(categoryId);
        if (current == null) {
            return result;
        }

        Long parentId = current.getParentId();
        // 如果父栏目ID不为0，则递归更新父栏目
        if (parentId != null && parentId != 0) {
            ContentCategory parent = contentCategoryMapper.selectContentCategoryByCategoryId(parentId);
            if (parent != null && "1".equals(parent.getStatus())) {
                // 递归更新父栏目的父栏目
                recursiveUpdateParentStatusToNormal(parentId);
                // 更新父栏目状态为正常
                parent.setStatus("0");
                parent.setUpdateTime(DateUtils.getNowDate());
                result += contentCategoryMapper.updateContentCategory(parent);
            }
        }
        return result;
    }
}
